package main

import (
	"fmt"
	"github.com/streadway/amqp"
	"log"
)

func failOnError(err error, msg string) {
	if err != nil {
		log.Fatalf("%s,%s", msg, err)
		panic(fmt.Sprintf("%s,%s", msg, err))
	}
}

func main() {
	//建立一个socket连接，处理一些协议转换及版本对接和登录授权的问题
	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672")
	failOnError(err, "Failed to dial to RabbitMQ")
	//建立连接之后，我们需要创建一个通道channel，之后我们的大多数API操作都是围绕通道来实现的：
	defer conn.Close()
	ch, err := conn.Channel()
	failOnError(err, "Failed to open a channel")
	defer ch.Close()
	//最后，我们需要定义一个队列用来存储、转发消息，
	//然后我们的sender只需要将消息发送到这个队列中，
	//就完成了消息的publish操作：
	query, err := ch.QueueDeclare(
		"hello",
		false, //durable
		false, //delete when unused
		false, //exclusive
		false, //no wait
		nil,   //arguments
	)
	failOnError(err, "Failed to declare q queue")

	body := "Hello"
	err = ch.Publish(
		"",
		query.Name,
		false,
		false,
		amqp.Publishing{
			ContentType: "",
			Body:        []byte(body),
		})
	failOnError(err, "Failed to publish a message")
}
